Within an information handling system, software and hardware generally work together. A host processor is used to process commands from software applications. An operating system handles tasks among various software applications and hardware components of the information handling system. To allow an operating system to best communicate with peripheral hardware devices, software drivers are generally provided. The software drivers include functions that the operating system, and system applications, may call. These functions are generally used to generate specific commands for the peripheral hardware, allowing the peripheral hardware to handle processes for the information handling system.
New system drivers are generally needed to match new hardware revisions. As hardware devices, such as display adapters, are upgraded, several versions of the same device may exist. While some driver functions may be used independent of the hardware version being used, other functions are device-specific. To make full use of upgraded features of a new hardware peripheral, some functions are made to specifically make use of the new features. Such device-specific drivers improve system performance using the improved hardware device and user experience.
While it is often desired to make full use of a new hardware peripheral's capabilities, it becomes difficult for a user to upgrade system drivers when switching between different versions of a particular hardware device. To match the specifications of each hardware version, different device drivers may be provided for each version of a hardware device. When switching between hardware devices with different drivers, a driver associated with a removed device must be removed from the system and a new driver must be installed to match the new device.
To simplify device installation, a single device driver may be made to support a variety of device versions. Functions that are device-independent are isolated and used for all versions of the device. Device-specific functions for every supported device version are provided in the driver as separate functions. Once the driver is loaded by the operating system, only functions that are device independent or specific to the device being used are called. While such a driver may support a variety of hardware device versions, the driver loaded into main memory becomes large. Furthermore, as the driver supports more hardware device versions, more of the driver functions become dead code that are loaded into memory but never used, due to association with an unused hardware device. Such a driver also becomes difficult to build, to debug, and to support. From the above discussion, it is apparent that an improved method of supporting multiple devices would be useful.